﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using BusinessLogicLayer;
using Entities;
using System.Globalization;
using System.Collections;

namespace QLNhaSach.Modules
{
    public partial class LapPhieuNhapSach : UserControl
    {
        BindingList<MyObject> gridDataList = new BindingList<MyObject>();
        ArrayList arr = new ArrayList();
        public LapPhieuNhapSach()
        {
            InitializeComponent();
            //textEdit2.Text = DateTime.Now.ToString("MM/dd/yyyy");
            dateEdit1.Text = DateTime.Now.ToString("MM/dd/yyyy");
            PhieuNhapBO pnbo = new PhieuNhapBO();
            String MaPhieuNhap = pnbo.GetLastID();
            if (MaPhieuNhap == null)
            {
                MaPhieuNhap = "1";
            }
            else
            {
                MaPhieuNhap = (int.Parse(MaPhieuNhap) + 1).ToString();
            }
            textEdit1.Text = MaPhieuNhap;
            gridDataList.Add(new MyObject("1", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("2", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("3", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("4", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("5", "", "", "", "", "", ""));
            gridControl1.DataSource = gridDataList;
            simpleButton4.Enabled = false;
            simpleButton5.Enabled = false;
        }

        private void simpleButton7_Click(object sender, EventArgs e)
        {
            Environment.Exit(1);
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if (gridDataList.Count > 0)
            {
                int cellValue = int.Parse(gridView1.GetRowCellValue(gridDataList.Count - 1, "OrderNumber").ToString());
                gridDataList.Add(new MyObject((cellValue + 1).ToString(), "", "", "", "", "", ""));
                gridControl1.DataSource = gridDataList;
            }
            else
            {
                gridDataList.Add(new MyObject("1", "", "", "", "", "", ""));
                gridControl1.DataSource = gridDataList;
            }
        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            if (gridDataList.Count > 0)
            {
                gridDataList.RemoveAt(gridDataList.Count - 1);
                gridControl1.DataSource = gridDataList;
            }
        }

        private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            String s_Column = e.Column.ToString();
            if (s_Column == "Code Book")
            {
                int value = int.Parse(e.Value.ToString());
                SachBO sbo = new SachBO();
                Sach s = sbo.GetSachByID(value);
                TheLoaiBO tlbo = new TheLoaiBO();
                TheLoai tl = tlbo.GetTheLoaiByID(s.MaTheLoai);
                TacGiaBO tgbo = new TacGiaBO();
                TacGia tg = tgbo.GetTacGiaByID(s.MaTacGia);
                gridView1.SetRowCellValue(e.RowHandle,"Title", s.TenSach);
                gridView1.SetRowCellValue(e.RowHandle, "Category", tl.TenTheLoai);
                gridView1.SetRowCellValue(e.RowHandle, "Author", tg.TenTacGia);
                gridView1.SetRowCellValue(e.RowHandle, "NumberConservation", s.SoLuongTon);
            }
        }
        public static bool IsValidDateTime(string dateTimeToCheck)
        {
            DateTime myDateTimeResult;
            return DateTime.TryParse(dateTimeToCheck, out myDateTimeResult);
        }
        private void simpleButton3_Click(object sender, EventArgs e)
        {
            int kq = 0;
            int flag = 0;
            string strDate = dateEdit1.Text;
            bool isValid = IsValidDateTime(strDate);
            if(isValid == false){
                MessageBox.Show("Dữ liệu nhập vào không phải là ngày tháng.(Month/date/year)");
                return;
            }
            if (gridDataList.Count > 0)
            {
                for (int count = 0; count < gridDataList.Count; count++)
                {
                    string maSach = gridView1.GetRowCellValue(count, "CodeBook").ToString();
                    if (maSach != "")
                    {
                        flag = 1;
                        string soLuongNhap = gridView1.GetRowCellValue(count, "NumberImported").ToString();
                        if (soLuongNhap == "")
                        {
                            string stt = gridView1.GetRowCellValue(count, "OrderNumber").ToString();
                            MessageBox.Show("Bạn chưa nhập số lượng vào dòng " + stt);
                            return;
                        }
                        else
                        {
                            SachBO sbo = new SachBO();
                            Sach s = sbo.GetSachByID(int.Parse(maSach));
                            //int soLuongNhap = int.Parse(gridView1.GetRowCellValue(count, "NumberImported").ToString());
                            ThamSoBO tsbo = new ThamSoBO();
                            ThamSo ts = tsbo.layThongTinThamSo();
                            if (int.Parse(soLuongNhap) < ts.SoLuongNhapToiThieu)
                            {
                                string stt = gridView1.GetRowCellValue(count, "OrderNumber").ToString();
                                MessageBox.Show("Số lượng nhập nhỏ hơn số lượng nhập quy định tại dòng " + stt + " Số lượng nhập tối thiểu quy định: " + ts.SoLuongNhapToiThieu);
                                return;
                            }
                            if (s.SoLuongTon > ts.SoLuongTonToiDa)
                            {
                                string stt = gridView1.GetRowCellValue(count, "OrderNumber").ToString();
                                MessageBox.Show("Số lượng tồn vượt số lượng tồn cho phép tại dòng " + stt + " Số lượng tồn cho phép nhập phải nhỏ hơn: " + ts.SoLuongTonToiDa);
                                return;
                            }
                        }
                    }
                }
                if(flag == 1 ){
                    PhieuNhap pn = new PhieuNhap();
                    
                    DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
                    dtfi.ShortDatePattern = "MM/dd/yyyy";
                    dtfi.DateSeparator = "/";
                    DateTime objDate = Convert.ToDateTime(strDate, dtfi);
                    pn.NgayNhap = objDate;
                    pn.MaPhieuNhap = int.Parse(textEdit1.Text);
                    PhieuNhapBO pnbo = new PhieuNhapBO();
                    kq = pnbo.InsertPhieuNhap(pn);
                    if (kq > 0)
                    {
                        for (int count = 0; count < gridDataList.Count; count++)
                        {
                            string maSach = gridView1.GetRowCellValue(count, "CodeBook").ToString();
                            if (maSach != "")
                            {
                                string soLuongNhap = gridView1.GetRowCellValue(count, "NumberImported").ToString();
                                ChiTietPhieuNhap ctpn = new ChiTietPhieuNhap();
                                ctpn.MaPhieuNhap = int.Parse(textEdit1.Text);
                                ctpn.MaSach = int.Parse(maSach);
                                ctpn.SoLuongNhap = int.Parse(soLuongNhap);
                                ChiTietPhieuNhapBO ctpnbo = new ChiTietPhieuNhapBO();
                                kq = ctpnbo.InsertChiTietPhieuNhap(ctpn);
                                arr.Add(kq);
                                if (kq == 0)
                                {
                                    MessageBox.Show("Thêm chi tiết phiếu nhập thất bại tại dòng : " + count + ".Hãy thử lại.");
                                }
                                int soLuongTon = int.Parse(gridView1.GetRowCellValue(count, "NumberImported").ToString());
                                SachBO sbo = new SachBO();
                                Sach s = sbo.GetSachByID(int.Parse(maSach));
                                s.MaSach = int.Parse(maSach);
                                s.SoLuongTon = s.SoLuongTon + int.Parse(soLuongNhap);
                                kq = sbo.UpdateSoLuongTonCuaSach(s);
                            }
                        }
                        MessageBox.Show("Thêm phiếu nhập thành công");
                        simpleButton4.Enabled = true;
                        simpleButton5.Enabled = true;
                        simpleButton3.Enabled = false;
                    }
                    else
                    {
                        MessageBox.Show("Thêm phiếu nhập thất bại. Hãy thử lại.");
                        return;
                    }
                }
                
            }
        }

        private void simpleButton5_Click(object sender, EventArgs e)
        {
            int maPhieuNhap = int.Parse(textEdit1.Text.ToString());
            PhieuNhapBO pnbo = new PhieuNhapBO();
            pnbo.DeletePhieuNhap(maPhieuNhap);
            ChiTietPhieuNhapBO ctpnbo = new ChiTietPhieuNhapBO();
            ctpnbo.DeleteChiTietPhieuNhap(maPhieuNhap);
            MessageBox.Show("Huỷ phiếu thành công.");
            for (int count = 0; count < gridDataList.Count; count++)
            {
                string maSach = gridView1.GetRowCellValue(count, "CodeBook").ToString();
                if (maSach != "")
                {
                    string soLuongNhap = gridView1.GetRowCellValue(count, "NumberImported").ToString();
                    int soLuongTon = int.Parse(gridView1.GetRowCellValue(count, "NumberImported").ToString());
                    SachBO sbo = new SachBO();
                    Sach s = sbo.GetSachByID(int.Parse(maSach));
                    s.MaSach = int.Parse(maSach);
                    s.SoLuongTon = s.SoLuongTon - int.Parse(soLuongNhap);
                    int kq = sbo.UpdateSoLuongTonCuaSach(s);
                }
            }
        }

        private void simpleButton6_Click(object sender, EventArgs e)
        {
            gridDataList.Clear();
            dateEdit1.Text = DateTime.Now.ToString("MM/dd/yyyy");
            PhieuNhapBO pnbo = new PhieuNhapBO();
            String MaPhieuNhap = pnbo.GetLastID();
            if (MaPhieuNhap == null)
            {
                MaPhieuNhap = "1";
            }
            else
            {
                MaPhieuNhap = (int.Parse(MaPhieuNhap) + 1).ToString();
            }
            textEdit1.Text = MaPhieuNhap;
            gridDataList.Add(new MyObject("1", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("2", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("3", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("4", "", "", "", "", "", ""));
            gridDataList.Add(new MyObject("5", "", "", "", "", "", ""));
            gridControl1.DataSource = gridDataList;
            simpleButton3.Enabled = true;
            simpleButton4.Enabled = false;
            simpleButton5.Enabled = false;
        }

        private void simpleButton4_Click(object sender, EventArgs e)
        {
            int kq = 0;
            int j = 0;
            int flag = 0;
            if (gridDataList.Count > 0)
            {
                for (int count = 0; count < gridDataList.Count; count++)
                {
                    string maSach = gridView1.GetRowCellValue(count, "CodeBook").ToString();
                    if (maSach != "")
                    {
                        flag = 1;
                        string soLuongNhap = gridView1.GetRowCellValue(count, "NumberImported").ToString();
                        if (soLuongNhap == "")
                        {
                            MessageBox.Show("Bạn chưa nhập đầy đủ số lượng vào cột");
                            return;
                        }
                    }
                }
                if (flag == 1)
                {
                    for (int i = 0; i < gridDataList.Count; i++)
                    {
                        string maSach = gridView1.GetRowCellValue(i, "CodeBook").ToString();
                        if (maSach != "")
                        {
                            ChiTietPhieuNhap ctpn = new ChiTietPhieuNhap();
                            ctpn.MaChiTietPhieuNhap = (int)arr[j];
                            ctpn.MaSach = int.Parse(maSach);
                            ctpn.SoLuongNhap = int.Parse(gridView1.GetRowCellValue(i, "NumberImported").ToString());
                            ChiTietPhieuNhapBO ctpnbo = new ChiTietPhieuNhapBO();
                            kq = ctpnbo.UpdateChiTietPhieuNhap(ctpn);
                            j++;
                        }

                    }
                    MessageBox.Show("Cập nhật thành công");
                }
            }
        }

        private void textEdit1_KeyPress(object sender, KeyPressEventArgs e)
        {

        }
    }
}
